package com.beemans.common.ui.activities

import android.content.Intent
import android.os.Bundle
import android.view.View
import com.beemans.common.base.ICommonUIAction
import com.beemans.common.ext.clearCache
import com.beemans.common.ext.immersionBarExt
import com.beemans.common.ext.showCallback
import com.beemans.common.ui.loadsir.EmptyCallback
import com.beemans.common.ui.loadsir.ErrorCallback
import com.beemans.common.ui.loadsir.LoadingCallback
import com.beemans.common.utils.AutoSize
import com.beemans.common.utils.ToastUtils
import com.blankj.utilcode.util.AppUtils
import com.gyf.immersionbar.ImmersionBar
import com.kingja.loadsir.core.LoadService
import com.tiamosu.fly.base.BaseFlyActivity
import com.tiamosu.fly.ext.addObserve

/**
 * @author tiamosu
 * @date 2021/3/15
 */
abstract class CommonActivity : BaseFlyActivity(), ICommonUIAction {
    internal var loadService: LoadService<Any>? = null  // 多状态布局

    override fun onCreateInit(savedInstanceState: Bundle?): Boolean {
        if (savedInstanceState != null) {
            relaunchApp()
            return false
        }

        //为了防止重复启动多个闪屏页面
        if (isLaunchPage()) {
            if (!isTaskRoot) {
                val intent = intent
                if (intent != null
                    && intent.hasCategory(Intent.CATEGORY_LAUNCHER)
                    && Intent.ACTION_MAIN == intent.action
                ) {
                    finish()
                    return false
                }
            }
            clearCache()
        }

        statusBarConfig()
        return true
    }

    /**
     * 重启应用
     */
    open fun relaunchApp() {
        AppUtils.relaunchApp(true)
    }

    /**
     * 是否是启动页
     */
    open fun isLaunchPage(): Boolean {
        return false
    }

    /**
     * 沉浸式状态栏配置
     */
    open fun statusBarConfig(block: ImmersionBar.() -> Unit = {}) {
        immersionBarExt(block)
    }

    /**
     * 进行屏幕适配，单位：pt
     */
    override fun getResources() = AutoSize.adaptScreen(super.getResources())

    /**
     * 页面传参获取，数据初始化
     */
    override fun initParameters(bundle: Bundle?) {}

    /**
     * 视图初始化
     */
    override fun initView(rootView: View?) {}

    /**
     * 监听事件初始化
     */
    override fun initEvent() {}

    /**
     * LiveData 观察者注册，配合[addObserve]使用
     */
    override fun createObserver() {}

    override fun showToast(msg: String?) {
        ToastUtils.showLong(msg)
    }

    override fun showViewLoading() {
        loadService?.showCallback<LoadingCallback>()
    }

    override fun showViewSuccess() {
        loadService?.showSuccess()
    }

    override fun showViewEmpty() {
        loadService?.showCallback<EmptyCallback>()
    }

    override fun showViewError() {
        loadService?.showCallback<ErrorCallback>()
    }

    override fun onDestroy() {
        super.onDestroy()
        //告诉垃圾收集器打算进行垃圾收集，而垃圾收集器进不进行收集是不确定的
        System.gc()
        //强制调用已经失去引用的对象的finalize方法
        System.runFinalization()
    }
}